/*
感谢万杨同学给予的灵感。
*/

#include<stdio.h>
#include<stdlib.h>
#include"train.h"

int main()
{
	int m,n,i,t1,t2;
	int *s;
	
	scanf("%d %d",&n,&m);
	s=malloc(sizeof(int)*n);
	for(i=0;i<n;i++)
			scanf("%d",&s[i]);
	
	Stack ns;
	Stack ms;
	SetStack(&ns,n);
	SetStack(&ms,m);
	for(i=0;i<n;i++)
	{	
		push(&ns,n-i);
	}
	i=0;
	while(1)
	{
		t1=gettop(&ns);
		t2=gettop(&ms);
		if(t1==-1&&t2==-1)
		{
			if(s) free(s);
			printf("YES\n");
			return 0;			
		}
		if((t1==-1||t1>s[i])&&t2!=s[i]) 
		{
			if(s) free(s);
			printf("NO\n");
			return 0;
		} 
		while((gettop(&ns)!=-1)&&(gettop(&ns)<=s[i]))
		{
			if(!push(&ms,gettop(&ns))) 
			{
				if(s) free(s);
				printf("NO\n");
				return 0;
			}
			pop(&ns) ;	
		}
		if(gettop(&ms)==s[i]) pop(&ms);
		i++;
	}
	return 0;
}

int test(FILE *fp)
{	
}
